.. :validated: 3.2.0

Установка резервного контроллера домена
=======================================

Установка резервного контроллера домена выполняется в два этапа:

* подготовка сервера к установке и ввод в домен как обычную рабочую станцию;
* назначение серверу роли контроллера домена на портале управления, повышение роли сервера происходит автоматически благодаря системе автоматизации.

Подготовка к установке резервного контроллера
---------------------------------------------

.. note:: 

   Разработчиками операционной системы **Astra Linux** рекомендовано использовать репозитории из ветки ``stable``, которые соответствуют последней версии системы, но для корректной работы продукта **ALD Pro** требуется использовать репозитории ``frozen``, чтобы гарантировать полную совместимость пакетов. Информация о поддержке очередных обновлений и возможности обновления операционной системы публикуется в Release Notes.

   Для корректных установки и обновления **ALD Pro** необходимо задействовать репозитории ``main`` и ``update`` (при его наличии) от **ОС Astra Linux**, отключив репозитории ``base``.

Для установки резервного контроллера **dc-2.ald.company.lan** нужно подготовить сервер с такими же техническими характеристиками, как и первый контроллер домена, т.к. реплика будет содержать в базе данных полную копию каталога и должна принять на себя всю нагрузку при отключении основного сервера.

Необходимо убедиться, что на сервере установлена **ОС Astra Linux Special Edition** с максимальным уровнем защищенности "Смоленск" (совместимость версий ОС и **ALD Pro** см. в :ref:`compatibility_matrix`). Сделать это можно с помощью следующих команд:

.. code-block:: bash

    cat /etc/astra/build_version
    sudo astra-modeswitch getname

.. _replica_network_interface_and_hosts_settings:

Настройка сетевого интерфейса и имени хоста
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Отключить службу **NetworkManager** на сервере:

.. code-block:: bash

    sudo systemctl stop NetworkManager
    sudo systemctl disable NetworkManager
    sudo systemctl mask NetworkManager
    sudo systemctl status NetworkManager

Назначить сетевому интерфейсу статический адрес и другие параметры в файле ``/etc/network/interfaces``:

.. code-block:: bash

    auto lo
    iface lo inet loopback

    auto eth0
        iface eth0 inet static
        address 10.0.1.12
        netmask 255.255.255.0
        gateway 10.0.1.1

На момент установки резервного КД разрешение имен должно выполняться через первый КД, поэтому содержимое файла ``/etc/resolv.conf`` должно быть следующим:

.. code-block:: bash
    
    search ald.company.lan
    nameserver 10.0.1.11

Чтобы применить новые настройки, следует перезапустить службу ``Networking``. Может потребоваться также очистить старое соединение командой ``flush`` утилиты ``ip``:

.. code-block:: bash

   sudo ip addr flush dev eth0
   sudo systemctl restart networking

Если IP-адрес реплики будет находиться не в той же подсети, что и первый контроллер домена, то администратору нужно будет вручную добавить соответствующую обратную зону, т.к. автоматическое создание обратных зон отключено по соображениям безопасности (см. **Руководство пользователя** → **Роли и службы сайта** → **Служба разрешения имен** → **Перенаправление запросов** → Добавление зоны).

Далее необходимо установить имя хоста:

.. code-block:: bash

   sudo hostnamectl set-hostname dc-2.ald.company.lan

Содержимое файла ``/etc/hosts`` на **dc-2** должно выглядеть следующим образом:

.. code-block:: bash

    10.0.1.12 dc-2.ald.company.lan dc-2
    127.0.0.1 localhost.localdomain localhost
    #127.0.1.1 dc-2 - закомментировать или удалить строку с адресом локальной петли
    
    # The following lines are desirable for IPv6 capable hosts
    ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

Проверить доступность контроллера домена **dc-1** и сервера репозиториев **dl.astralinux.ru** можно следующими командами:

.. code-block:: bash

    ping -c 4 dc-1
    ping -c 4 dl.astralinux.ru

Ввод сервера в домен
~~~~~~~~~~~~~~~~~~~~

Подключение репозиториев **ОС Astra Linux Special Edition** 1.7.ххх и продукта **ALD Pro** 3.2.0 выполняется также, как в разделе :ref:`first_dc_deployment`:

Содержание файла ``/etc/apt/sources.list`` должно быть следующим:

.. code-block:: bash

    deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.xxx/repository-main 1.7_x86-64 main non-free contrib
    deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.xxx/repository-update 1.7_x86-64 main contrib non-free

Пример для 1.7.8:

.. code-block:: bash

    deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.8/repository-main 1.7_x86-64 main non-free contrib
    deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.8/repository-update 1.7_x86-64 main contrib non-free

При использовании ОС **Astra Linux** с установленным срочным оперативным обновлением (UU) необходимо дополнительно указать соответствующий ему **frozen** репозиторий. Подробнее в разделе :ref:`connecting_repositories`.

Пример для 1.7.9 UU1:

.. code-block:: bash

   deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.9/uu/1/repository-main 1.7_x86-64 main non-free contrib
   deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.9/uu/1/repository-update 1.7_x86-64 main contrib non-free

Корректное содержимое файла ``/etc/apt/sources.list.d/aldpro.list``:

.. code-block:: bash

    deb https://dl.astralinux.ru/aldpro/frozen/01/3.2.0/ 1.7_x86-64 main base

Обновить списки пакетов и программное обеспечение можно следующими командами:

.. code-block:: bash
    
    sudo apt update
    sudo apt list --upgradable
    sudo apt dist-upgrade -y -o Dpkg::Options::=--force-confold

Установить клиентскую часть продукта **ALD Pro**:

.. code-block:: bash

    sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -q aldpro-client

Ввести хост **dc-2** в домен **ald.company.lan** можно следующей командой:

.. code-block:: bash

    sudo aldpro-client-installer --domain ald.company.lan --account admin --host dc-2 --guiless

Описание параметров командной строки доступно в :ref:`domain_parameters` или при выводе справочной информации в окне терминала:

.. code-block:: bash

    sudo aldpro-client-installer --help

Рекомендуется использовать ключ ``--validate``, активирующий дополнительные проверки (см. перечень проверок в :ref:`computer_input`)

.. attention::

    Если применить ключ ``--force``, будут пропущены все проверки — как включенные по умолчанию, так и активируемые ключом ``--validate``.

    **Не рекомендуется применять ключ без необходимости, так как это может нарушить структуру домена и привести к нежелательным последствиям!**

Целесообразно применять ключ ``--force`` для принудительного ввода в домен компьютера, для которого в домене уже существует учетная запись. Требуется в тех случаях, когда администратор переустанавливает ОС и хочет ввести компьютер в домен с тем же именем.

После ввода команды система запросит ввести пароль администратора домена.

Для применения новых параметров требуется перезагрузить сервер:

.. code-block:: bash
    
    sudo reboot

Повышение роли сервера до резервного контроллера домена
-------------------------------------------------------

Повышение роли сервера до резервного КД выполняется через портал управления -- **Управление доменом** → **Сайты и службы** → **Контроллеры домена**. Необходимо нажать кнопку **[Новый контроллер домена]** и установить следующие параметры:

* **Имя контроллера** - целевой хост из списка;
* **Имя сайта** - определить сайт, который нужно назначить контроллеру домена;
* **Назначить роль глобального контроллера** - установить флажок, чтобы автоматически установить на сервере модуль глобального каталога;
* **Назначить роль pkiproxy** - установить флажок, чтобы будущий контроллер мог обрабатывать запросы на выпуск сертификатов. Для успешного назначения этой роли на целевом хосте нужно заранее создать файлы ``/etc/ssl/freeipa/ca.key`` и ``/etc/ssl/freeipa/ca.crt`` и поместить в них закрытый ключ от доменного сертификата и сам сертификат соотвественно.

.. figure:: media/11_promote-dc-2.png
    :name: promote-dc
    :scale: 50

    Повышение роли сервера до контроллера домена

Нажать кнопку **[Сохранить]** и роль автоматически применится в течение 30 минут.

Результат установки роли можно увидеть в карточке хоста.

Дополнительную информацию о процессе установки можно получить на целевом хосте в журналах ``term.log`` и ``minion`` или воспользоваться утилитой ``journalctl`` с ключом ``-f``, которая позволяет получить информацию напрямую из ``systemd``:

.. code-block:: bash

    sudo tail /var/log/apt/term.log
    sudo tail /var/log/aldpro-salt/minion
    sudo journalctl -f

После успешной установки резервного контроллера домена рекомендуется произвести действия по настройке конфигурационного файла ``/etc/bind/ipa-options-ext.conf`` согласно разделу :ref:`dns-settings`.

Для форсирования установки подсистемы можно использовать следующую команду:

.. code-block:: bash
    
    sudo aldpro-roles --iud

Процесс установки виден в выводе команды форсирования, результат установки отображается в карточке сервера на портале управления.

Если установка подсистемы завершится ошибкой, то повторную установку можно будет запустить следующей командой:

.. code-block:: bash
    
    sudo aldpro-roles --iud --action install

После установки резервного контроллера домена начнется репликация данных, которая займет некоторое время. Информацию о завершении репликации можно будет увидеть в файле ``/var/log/dirsrv/slapd-ALD-COMPANY-LAN/errors``.

.. code-block:: bash

    sudo cat /var/log/dirsrv/slapd-ALD-COMPANY-LAN/errors | grep 'import userRoot'

    [25/Nov/2024:09:40:09.407239382 +0300] - INFO - bdb_import_monitor_threads - import userRoot: Workers finished; cleaning up...
    [25/Nov/2024:09:40:09.641808546 +0300] - INFO - bdb_import_monitor_threads - import userRoot: Workers cleaned up.
    [25/Nov/2024:09:40:09.668458995 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Indexing complete.  Post-processing...
    [25/Nov/2024:09:40:09.684394481 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Generating numsubordinates (this may take several minutes to complete)...
    [25/Nov/2024:09:40:09.756181641 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Generating numSubordinates complete.
    [25/Nov/2024:09:40:09.770676960 +0300] - INFO - bdb_get_nonleaf_ids - import userRoot: Gathering ancestorid non-leaf IDs...
    [25/Nov/2024:09:40:09.784493153 +0300] - INFO - bdb_get_nonleaf_ids - import userRoot: Finished gathering ancestorid non-leaf IDs.
    [25/Nov/2024:09:40:09.799225688 +0300] - INFO - ldbm_get_nonleaf_ids - import userRoot: Starting sort of ancestorid non-leaf IDs...
    [25/Nov/2024:09:40:09.815333717 +0300] - INFO - ldbm_get_nonleaf_ids - import userRoot: Finished sort of ancestorid non-leaf IDs.
    [25/Nov/2024:09:40:09.846484631 +0300] - INFO - bdb_ancestorid_new_idl_create_index - import userRoot: Creating ancestorid index (new idl)...
    [25/Nov/2024:09:40:09.893268580 +0300] - INFO - bdb_ancestorid_new_idl_create_index - import userRoot: Created ancestorid index (new idl).
    [25/Nov/2024:09:40:09.907374703 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Flushing caches...
    [25/Nov/2024:09:40:09.921178776 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Closing files...
    [25/Nov/2024:09:40:10.723980460 +0300] - INFO - bdb_public_bdb_import_main - import userRoot: Import complete.  Processed 3616 entries in 7 seconds. (516.57 entries/sec)